/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package client;

import java.io.Serializable;
import java.util.ArrayList;
import mensaje.Message;
import java.util.LinkedList;
import listas.ListaMensajesRecibidos;
import server.MailServer;
/**
 * MailCliente representa la parte del sistema que interactua
 * con el usuario. Es responsable de toda interaccion con el ususario.
 * @author foUMaster
 * @version 1.1.1
 */
public class MailClient implements Serializable{
    private String usuario;
    private ServerClient serverClient;    
    
/**
 * Constructor de la clase MailClient
 * @param usuario El parametro usuario define el nombre del usuario de correo.
 * @param mailServer  El parametro mailServer define el servidor del usuario de 
 * correo.
 */    
    public MailClient(String usuario, MailServer mailServer) {
        this.usuario = usuario;
        serverClient=new ServerClient(mailServer, this);
   }    

/**
 * Método que consulta al servidor a fin de ver si el usuario tiene algun
 * mensaje.
 * @return int Un entero que es el resultado de la cantidad de mensajes que 
 * tiene el usuario.
 */
    public int chekMessages() {
        return serverClient.numeroMensajes(usuario);
    }
 
 /**
  * Método que obtiene el siguiente mensaje del servidor y lo almacena en sus 
  * mensajes recibidos.
  * @return Message Un objeto message con el mensaje del usuario.
 */
    public Message readMessage() {   
        return serverClient.nexMessage(usuario);
    }

/**
 * Método que envia un mensaje a un usuario
 * @param sender El parametro sender define el usuario de correo que envia el 
 * mensaje.
 * @param destinatario El parametro destinario define el usuario de correo 
 * que recibe el mensaje.
 * @param asunto El parametro asunto define el asunto del correo.
 * @param mensaje El parametro mensaje define el mensaje del corrreo.
 */
    public void sendMessage(String sender, String destinatario, String asunto, String mensaje) {        
        serverClient.sendMessage(sender, destinatario, asunto, mensaje);
    }
 
    /**
     * Metodo que verifica si el usuario enviado por parametro 
     * se encuentra registrado en el serverClient.
     * @return  devuelve true si el usuario corresponde a este servidor, 
     * y false de lo contrario.
     */
    public boolean autenticarUsuario(){
        return serverClient.autenticarUsuario(usuario);
    }
    
    /**
     * Elimina el mensaje enviado por parametro.
     * @param mensaje 
     */
    public void eliminarMensaje(Message mensaje){//alberto proporcionar el eliminar mensaje.
        serverClient.eliminarMensajes(mensaje);
    }
    
    /**
     * Devuelve un arrayList con todos los mensajes que pertenecen al 
     * usuario.
     * @return  Retorna un ArrayList de los mensajes de usuario.
     */
    public ArrayList<Message> listarMensajes(){
        return serverClient.listarMensajes();
    }
    
    /**
     * Cambia el estado del mensaje pasado por parametro a leido.
     * @param mensaje  Mensaje a cambiar el estado.
     */
    public void MarcarMensaje(Message mensaje){
          serverClient.marcarMensaje(mensaje);
    }
    
    /**
     * retorna el usuario que esta logueado a este cliente.
     * @return  Retorna el nombre del usuario asociado a este MailClient
     */
    public String obtenerUsuario() {
        return usuario;
    }
}
